import axios from 'axios'
import { ElMessage } from 'element-plus'
import qs from 'qs'

// 创建axios实例
const service = axios.create({
  baseURL: '', // 清空baseURL，使用相对路径
  timeout: 30000, // 请求超时时间增加到30秒
  headers: {
    'Content-Type': 'application/json'  // 默认使用 JSON
  },
  transformRequest: [
    function(data) {
      return JSON.stringify(data)  // 始终使用 JSON 格式
    }
  ]
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    // 只在不是登录/注册接口时加 token
    if (
      token &&
      !config.url.includes('/auth/login') &&
      !config.url.includes('/auth/register')
    ) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    
    // 判断响应是否成功
    if (res.code === 0 || res.code === 200) {
      return res
    }
    
    // 判断token是否失效
    if (res.code === 401) {
      // 清除本地token并跳转到登录页
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      window.location.href = '/login'
      throw new Error('未授权，请重新登录111')
    }
    
    // 对于其他错误情况，抛出错误
    throw new Error(res.message || '请求失败')
  },
  error => {
    console.error('Error response:', error.response?.data)
    
    // 如果有响应数据
    if (error.response && error.response.data) {
      const errorData = error.response.data
      throw new Error(errorData.message || '请求失败')
    }
    
    // 如果没有响应数据，返回网络错误
    throw new Error(error.message || '网络错误')
  }
)

export default service 